home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #1 / Amiga Plus CD - 1997 - No. 01.iso / pd / programmierung / proasm / routines / extmsg.r < prev    next >
Text File  |  1995-07-10  |  3KB  |  138 lines

  1.  
  2. ;---;  extmsg.r  ;-------------------------------------------------------------
  3. *
  4. *    ****    EXTERNAL MSG ROUTINES    ****
  5. *
  6. *    Author        Stefan Walter
  7. *    Version        1.00
  8. *    Last Revision    19.07.92
  9. *    Identifier    exm_defined
  10. *       Prefix        exm_    (external messages)
  11. *                 ¯¯       ¯
  12. *    Functions    XAllocMSG, XFreeMSG, XSendMSG, XOpenPort, XClosePort
  13. *
  14. *    NOTE:    This include file provides the message routines for stuff
  15. *        like snooping of a library vector which sends a message
  16. *        to the control task. The other task calls XAllocMSG() with
  17. *        a number of additional bytes to alloc for data, fills in the
  18. *        data and calls XSendMSG to send it to a port. Voila.
  19. *
  20. ;------------------------------------------------------------------------------
  21.  
  22. ;------------------
  23.     ifnd    exm_defined
  24. exm_defined    =1
  25.  
  26. ;------------------
  27. exm_oldbase    equ __base
  28.     base    exm_base
  29. exm_base:
  30.  
  31. ;------------------
  32.  
  33. ;------------------------------------------------------------------------------
  34. *
  35. * XAllocMSG    Allocates a message struct with extension.
  36. *
  37. * INPUT        d0    Number of bytes to be allocated additionally
  38. *
  39. * RESULT    d0    Address of message or 0 if no memory available
  40. *        CCR    On d0
  41. *
  42. ;------------------------------------------------------------------------------
  43.  
  44. ;------------------
  45. XAllocMSG:
  46.  
  47. ;------------------
  48. ; Allocate the messy.
  49. ;
  50. \alloc:
  51.     movem.l    d1-a6,-(sp)
  52.     add.w    #20,d0
  53.     move.w    d0,d7
  54.     move.l    #$10001,d1
  55.     move.l    4.w,a6
  56.     jsr    -198(a6)        ;AllocMem()
  57.     tst.l    d0
  58.     beq.s    \done            ;No go!
  59.     move.l    d0,a0
  60.     move.w    #$500,8(a0)
  61.     move.w    d7,18(a0)
  62. \done:
  63.     tst.l    d0
  64.     movem.l    (sp)+,d1-a6
  65.     rts
  66.  
  67. ;------------------
  68.  
  69. ;------------------------------------------------------------------------------
  70. *
  71. * XFreeMSG    Frees a message previously allocated with XAllocMSG.
  72. *
  73. * INPUT        d0    Message
  74. *
  75. ;------------------------------------------------------------------------------
  76.  
  77. ;------------------
  78. XFreeMSG:
  79.  
  80. ;------------------
  81. ; Free the messy.
  82. ;
  83. \free:
  84.     movem.l    d0-a6,-(sp)
  85.     move.l    d0,a1
  86.     moveq    #0,d0
  87.     move.w    18(a1),d0
  88.     move.l    4.w,a6
  89.     jsr    -210(a6)        ;FreeMem()
  90.     movem.l    (sp)+,d0-a6
  91.     rts
  92.  
  93. ;------------------
  94.  
  95. ;------------------------------------------------------------------------------
  96. *
  97. * XSendMSG    Send a message to a port.
  98. *
  99. * INPUT        a0    Port
  100. *        a1    Message    
  101. *
  102. ;------------------------------------------------------------------------------
  103.  
  104. ;------------------
  105. XSendMSG:
  106.  
  107. ;------------------
  108. ; Send.
  109. ;
  110. \free:
  111.     movem.l    d0-a6,-(sp)
  112.     move.l    4.w,a6
  113.     jsr    -366(a6)        ;PutMsg()
  114.     movem.l    (sp)+,d0-a6
  115.     rts
  116.  
  117. ;------------------
  118.  
  119. ;--------------------------------------------------------------------
  120.  
  121. ;------------------
  122.     include    ports.r
  123. XOpenPort    =    MakePort
  124. XClosePort    =    UnMakePort
  125.  
  126. ;------------------
  127.  
  128. ;--------------------------------------------------------------------
  129.  
  130. ;------------------
  131.     base    exm_oldbase
  132.  
  133. ;------------------
  134.     endif
  135.  
  136.  end
  137.  
  138.